import { RootThunkAction } from '@/types/store'
import { http } from '@/utils/http'
import { clearToken, setToken } from '@/utils/token'
import type { LoginResponse } from '@/types/data'

// 定义 login 接口的传参类型
type LoginParams = { mobile: string; code: string }
// 定义 login 接口的响应类型
// type LoginResponse = {
//   message: string
//   data: Token
// }

export const login = (value: LoginParams): RootThunkAction => {
  // 原来 action creator
  // return {} 原生的处理不了 使用的中间件
  return async (dispatch, getState) => {
    // 发起网络请求
    const res = await http.post<LoginResponse>('/authorizations', value)
    // 拿到返回数据
    // console.log('登录返回数据===>:', res.data.data)
    // 设置本地token
    setToken(res.data.data)
    // 分发 action 将 token 保存到 redux state 中
    dispatch({ type: 'login/token', payload: res.data.data })
  }
}

export const getCode = (mobile: string): RootThunkAction => {
  return async (dispatch) => {
    const res = await http.get(`/sms/codes/${mobile}`)
    // console.log(res)
    // 注意:验证码是发送到手机上面的，因此，不需要更新REDUX状态
  }
}

// 登出 action creator
export const logout = (): RootThunkAction => {
  return (dispatch) => {
    // 先清除本地
    clearToken()

    // 再清除redux中
    dispatch({
      type: 'login/token', // 这里复用的登录的 reducer 方法
      payload: { token: '', refresh_token: '' },
    })
  }
}
